package org.chen.practice.easy;

/**
 * @Author chen
 * @Date 2023/8/7 21:50
 * 问题描述
 * 编写一个函数来查找字符串数组中的最长公共前缀。
 * 如果不存在公共前缀，返回空字符串 ""。
 *
 * 示例 1：
 * 输入：strs = ["flower","flow","flight"]
 * 输出："fl"
 *
 * 示例 2：
 * 输入：strs = ["dog","racecar","car"]
 * 输出：""
 * 解释：输入不存在公共前缀。
 *
 * 提示：
 *     1 <= strs.length <= 200
 *     0 <= strs[i].length <= 200
 *     strs[i] 仅由小写英文字母组成
 */
public class LongestCommonPrefix {
    public static void main(String[] args) {
        String[] strs = {"flower","flow","flight"};
        System.out.println(longestCommonPrefix(strs));
    }

    /**
     * 横向扫描法时间复杂都O(mn),空间复杂都O(1)
     * @param strs
     * @return
     */
    public static String longestCommonPrefix(String[] strs) {
        if(strs.length ==0 || strs ==null){
            return "";
        }
        String prefix = strs[0];
        for(int i=1;i<strs.length;i++){
           prefix = commonprfix(prefix,strs[i]);
           if(prefix.equals("")){
               break;
           }
        }
        return prefix;
    }

    public static String commonprfix(String prefix,String compareS){
        int len = Math.min(prefix.length(),compareS.length());
        int index = 0;
        while(index<len && prefix.charAt(index)==compareS.charAt(index)){
            index++;
        }
        return prefix.substring(0,index);
    }
    public static String longestCommonPrefixRow(String[] strs){
        if(strs ==null || strs.length==0){
            return "";
        }

        int length  = strs[0].length();
        int count = strs.length;
        for(int i=0;i<count;i++){
            char c = strs[0].charAt(i);
            for(int j = 0;j<count;j++){
                if(i == strs[j].length() || strs[j].charAt(i) != c){
                    return strs[0].substring(0,i);
                }
            }
        }
        return strs[0];
    }
}
